<?php

class ExcelService extends Model {

    /**
     * @var AtendimentoService
     */
    private $atendimentoService;
    /**
     * @var ComunicadoService
     */
    private $comunicadoService;

    public function injectDependencies() {
        $this->atendimentoService = AtendimentoService::getInstance();
        $this->comunicadoService = ComunicadoService::getInstance();
    }

    public function personalReport($ArFilter = false) {
        $ArHeaders = array(
            Encode::forceISO('Usuário'),
            array('CI' => 'Chamado Interno'),
            array('CE' => 'Chamado Externo'),
            array('CT' => Encode::forceISO('Chamado Telefônico')),
            array('CC' => 'Clientes Cadastrados'),
            array('AC' => 'Aguardando Resposta'),
            array('CP' => 'Chamados Perfeitos')
        );

        $Report = $this->atendimentoService->generateReportFromLoggedUser($ArFilter);

        $ArLines = array(
            array(
                Dracosys::getLoggedUser()->getArDadosUsuario('StNome'),
                $Report['InternalCalled'],
                $Report['ExternalCalled'],
                $Report['PhoneCalled'],
                $Report['CustomerRegister'],
                $Report['WaitingCustomerCalled'],
                $Report['PerfectCalled']
            )
        );

        $Excel = $this->generateExcel('Relatorio_Pessoal', 7, Encode::forceISO('Relatório Pessoal'), $ArHeaders, $ArLines);
        return $Excel;
    }

    public function individualReport($ArFilter = false) {
        $ArHeaders = array(
            Encode::forceISO('Usuário'),
            array('CI' => 'Chamado Interno'),
            array('CE' => 'Chamado Externo'),
            array('CT' => Encode::forceISO('Chamado Telefônico')),
            array('CC' => 'Clientes Cadastrados'),
            array('AC' => 'Aguardando Resposta'),
            array('CP' => 'Chamados Perfeitos')
        );

        $ArReportLines = $this->atendimentoService->generateIndividualReport($ArFilter);

        $ArLines = array();
        foreach($ArReportLines as $Usuario) {
            $ArLines[] = array(
                $Usuario->getArDadosUsuario('StNome'),
                $Usuario->getReport('INTERNO'),
                $Usuario->getReport('EXTERNO'),
                $Usuario->getReport('TELEFONICO'),
                $Usuario->getReport('CLIENTES_CADASTRADOS'),
                $Usuario->getReport('CHAMADOS_NAO_FECHADOS'),
                $Usuario->getReport('FINALIZADOS_1_RESPOSTA')
            );
        }

        $Excel = $this->generateExcel('Relatorio_Individual', 7, Encode::forceISO('Relatório Individual'), $ArHeaders, $ArLines);
        return $Excel;
    }

    public function sectorReport($ArFilter = false) {
        $ArHeaders = array(
            'Setor',
            array('CI' => 'Chamado Interno'),
            array('CE' => 'Chamado Externo'),
            array('CT' => Encode::forceISO('Chamado Telefônico')),
            array('CC' => 'Clientes Cadastrados'),
            array('AC' => 'Aguardando Resposta'),
            array('CP' => 'Chamados Perfeitos')
        );

        $ArReportLines = $this->atendimentoService->generateSectorReport($ArFilter);

        $ArLines = array();
        foreach($ArReportLines as $Sector) {
            $ArLines[] = array(
                $Sector->getStNome(),
                $Sector->getReport('INTERNO'),
                $Sector->getReport('EXTERNO'),
                $Sector->getReport('TELEFONICO'),
                $Sector->getReport('CLIENTES_CADASTRADOS'),
                $Sector->getReport('CHAMADOS_NAO_FECHADOS'),
                $Sector->getReport('FINALIZADOS_1_RESPOSTA')
            );
        }

        $Excel = $this->generateExcel('Relatorio_Setor', 7, Encode::forceISO('Relatório Setor'), $ArHeaders, $ArLines);
        return $Excel;
    }

    public function departamentReport($ArFilter = false) {
        $ArHeaders = array(
            'Departamento',
            array('CI' => 'Chamado Interno'),
            array('CE' => 'Chamado Externo'),
            array('CT' => Encode::forceISO('Chamado Telefônico')),
            array('CC' => 'Clientes Cadastrados'),
            array('AC' => 'Aguardando Resposta'),
            array('CP' => 'Chamados Perfeitos')
        );

        $ArReportLines = $this->atendimentoService->generateDepartamentReport($ArFilter);

        $ArLines = array();
        foreach($ArReportLines as $Departament) {
            $ArLines[] = array(
                $Departament->getStNome(),
                $Departament->getReport('INTERNO'),
                $Departament->getReport('EXTERNO'),
                $Departament->getReport('TELEFONICO'),
                $Departament->getReport('CLIENTES_CADASTRADOS'),
                $Departament->getReport('CHAMADOS_NAO_FECHADOS'),
                $Departament->getReport('FINALIZADOS_1_RESPOSTA')
            );
        }

        $Excel = $this->generateExcel('Relatorio_Departamento', 7, Encode::forceISO('Relatório Departamento'), $ArHeaders, $ArLines);
        return $Excel;
    }

    private function generateExcel($StFileName, $ItColumn, $StTitle, $ArHeaders, $ArLines) {
        $Excel = new ExcelReport($StFileName, $ItColumn);
        $Excel->addTitle(Encode::forceISO($StTitle));
        $Excel->addHeaders($ArHeaders);

        foreach($ArLines as $Line) {
            $Excel->addLine($Line);
        }

        return $Excel;
    }

}

?>
